// 串的静态数组存储结构定义
typedef struct {
    char str[MaxSize];
    int length;
} SString;

// 1. 初始化操作
void Initiate(SString *S) {
    S->length = 0;
}

// 2. 插入子串操作
int Insert(SString *S, int pos, SString T) {
    /* 在串 S 的 pos 位置插入子串 T*/
    int i;
    if (pos < 0 || pos > S->length) {
        printf("pos 参数错误！");
        return 0;
    } else if (S->length + T.length > MaxSize) {
        printf("数组已满！");
        return 0;
    } else {
        // 依次后移数据元素
        for (i = S->length - 1; i >= pos; i--)
            S->str[i + T.length] = S->str[i];
        
        // 插入子串 T
        for (i = 0; i < T.length; i++)
            S->str[pos + i] = T.str[i];
        
        // 产生新的串长
        S->length += T.length;
        return 1;
    }
}

// 3. 删除子串操作
int Delete(SString *S, int pos, int len) {
    // 删除串 S 从 pos 位置开始长度为 len 的子串
    int i;
    if (pos < 0 || pos >= S->length || len <= 0 || pos + len > S->length) {
        printf("参数出错");
        return 0;
    } else if (S->length <= 0) {
        printf("串空");
        return 0;
    } else {
        // 依次前移数据元素
        for (i = pos + len; i <= S->length - 1; i++)
            S->str[i - len] = S->str[i];
        
        // 产生新的串长度值
        S->length -= len;
        return 1;
    }
}

// 4. 取子串操作
void SubString(SString S, int pos, int len, SString *T) {
    int i;
    if (pos < 0 || pos >= S.length || len <= 0 || pos + len > S.length) {
        printf("参数出错");
        return;
    } else if (S.length <= 0) {
        printf("串空");
        return;
    } else {
        for (i = 0; i < len; i++)
            T->str[i] = S.str[pos + i];
        T->length = len;
    }
}